ποΈGitΠ―ΡΠ°ποΈ
core/domain/README.md renovate/net.java.dev.jna-jna-5.x (5a8f4966) Text, 5.63 KB
T383838:core:domain
Overview
The T383838:core:domain module is the business-logic layer of the KMP architecture. It contains exclusively use-case classes β no UI, no platform code, no mutable state. Each use case is a thin orchestrator that coordinates one or more repository/model dependencies to fulfil a single application action.
Targets: Android Β· JVM Β· iOS (via T383838meshtastic.kmp.library convention plugin)
Key Responsibilities
β’ Orchestrate radio configuration reads/writes (config, module config, channels, owner, position)
β’ Manage remote-admin session lifecycle (per-node passkey negotiation)
β’ Application settings toggles (theme, locale, analytics, notifications, location sharing)
β’ Data export (CSV mesh log, profile T383838.zip, security config)
β’ Profile and config import/install
β’ Node database maintenance (clean, reset, selective purge)
Source Structure
T282828
src/commonMain/kotlin/org/meshtastic/core/domain/
βββ di/
β βββ CoreDomainModule.kt β Koin @Module + component scan
βββ usecase/
βββ session/
β βββ EnsureRemoteAdminSessionUseCase.kt
β βββ EnsureSessionResult.kt
β βββ ObserveRemoteAdminSessionStatusUseCase.kt
βββ settings/
βββ AdminActionsUseCase.kt
βββ CleanNodeDatabaseUseCase.kt
βββ ExportDataUseCase.kt
βββ ExportProfileUseCase.kt
βββ ExportSecurityConfigUseCase.kt
βββ ImportProfileUseCase.kt
βββ InstallProfileUseCase.kt
βββ IsOtaCapableUseCase.kt
βββ MeshLocationUseCase.kt
βββ ProcessRadioResponseUseCase.kt
βββ RadioConfigUseCase.kt
βββ SetAppIntroCompletedUseCase.kt
βββ SetDatabaseCacheLimitUseCase.kt
βββ SetLocaleUseCase.kt
βββ SetMeshLogSettingsUseCase.kt
βββ SetNotificationSettingsUseCase.kt
βββ SetProvideLocationUseCase.kt
βββ SetThemeUseCase.kt
βββ ToggleAnalyticsUseCase.kt
βββ ToggleHomoglyphEncodingUseCase.kt
Notable APIs
T383838EnsureRemoteAdminSessionUseCase
Ensures a per-node remote-admin passkey session exists before entering the remote admin UI. Uses a T383838Mutex-guarded T383838inFlight map so that double-taps coalesce onto a single T383838Deferred.
T282828
Tff7b72sealed Tff7b72interface T56d364EnsureSessionResult Tb4b4b4{
Tff7b72data Tff7b72object T56d364AlreadyActive Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// passkey already fresh
Tff7b72data Tff7b72object T56d364Refreshed Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// metadata response arrived
Tff7b72data Tff7b72object T56d364Timeout Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// no response within 10 s
Tff7b72data Tff7b72object T56d364Disconnected Tb4b4b4: Te6edf3EnsureSessionResult T8b949e// radio not connected
Tb4b4b4}
T383838RadioConfigUseCase
Radio configuration read/write operations, all returning the T383838packetId for async tracking:
ββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ
β Method β Description β
ββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ€
β T383838setOwner / T383838getOwner β Node owner info β
β T383838setConfig / T383838getConfig β T383838Config proto (device, position, power, β¦) β
β T383838setModuleConfig / T383838getModuleConfig β T383838ModuleConfig proto β
β T383838getChannel / T383838setRemoteChannel β Channel configuration β
β T383838setFixedPosition / T383838removeFixedPosition β Fixed GPS position β
β T383838setRingtone / T383838getRingtone β External notification ringtone β
β T383838setCannedMessages / T383838getCannedMessages β Canned message slots β
ββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββ
T383838AdminActionsUseCase
T282828
Te6edf3rebootTb4b4b4(Te6edf3destNumTb4b4b4)
Te6edf3shutdownTb4b4b4(Te6edf3destNumTb4b4b4)
Te6edf3factoryResetTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3isLocalTb4b4b4) T8b949e// also clears local NodeDB when isLocal = true
Te6edf3nodedbResetTb4b4b4(Te6edf3destNumTb4b4b4, Te6edf3preserveFavoritesTb4b4b4, Te6edf3isLocalTb4b4b4)
T383838ExportDataUseCase
Streams all mesh log packets to a CSV T383838BufferedSink. Columns: date, time, from, sender name/location, received location/elevation, SNR, distance, hop limit, payload.
Dependency Graph
T282828
core:domain
βββ core:repository (use-case interfaces & contracts)
βββ core:model (domain models)
βββ core:proto (Meshtastic protobuf types)
βββ core:common
βββ core:database
βββ core:datastore
βββ core:resources
DI
All use cases are registered via Koin component scan on T383838org.meshtastic.core.domain. No manual binding is needed β annotate a new use case with T383838@Single and it is picked up automatically.
Dependency Graph
<!--region graph-->
T282828
Te6edf3graph Te6edf3TB
:Te6edf3coreTb4b4b4:Tff7b72domainTff7b72[Te6edf3domainTff7b72]Tff7b72:::Te6edf3kmpTff7b72-Te6edf3library
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3repository
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3model
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3common
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Tff7b72database
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3datastore
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3resources
:Te6edf3coreTb4b4b4:Tff7b72domain Tff7b72-Tb4b4b4.Tff7b72-Tff7b72> :Te6edf3coreTb4b4b4:Te6edf3testing
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3application Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3applicationTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3composeTff7b72-Te6edf3desktopTff7b72-Te6edf3application Te6edf3fillTb4b4b4:Te6edf3#CAFFBFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3feature Te6edf3fillTb4b4b4:Te6edf3#FFD6A5Tb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#9BF6FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3libraryTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#9BF6FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3androidTff7b72-Te6edf3test Te6edf3fillTb4b4b4:Te6edf3#A0C4FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3jvmTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#BDB2FFTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3feature Te6edf3fillTb4b4b4:Te6edf3#FFD6A5Tb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3libraryTff7b72-Te6edf3compose Te6edf3fillTb4b4b4:Te6edf3#FFC1CCTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Te6edf3kmpTff7b72-Te6edf3library Te6edf3fillTb4b4b4:Te6edf3#FFC1CCTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
Te6edf3classDef Tff7b72unknown Te6edf3fillTb4b4b4:Te6edf3#FFADADTb4b4b4,Te6edf3strokeTb4b4b4:Te6edf3#000Tb4b4b4,Te6edf3strokeTff7b72-Te6edf3widthTb4b4b4:T79c0ff2Te6edf3pxTb4b4b4,Te6edf3colorTb4b4b4:Te6edf3#000Tb4b4b4;
<!--endregion-->
Served by rngit 1.5.0 - Generated in 0.07s